<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<script src="../js/vue.js"></script>

<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <button @click="toUpper">转变为大写字符</button>
        <h2>{{msgA}}</h2>
        <h2 v-uc.xx="msg"></h2>
        <h3 v-uc1="info"></h3>
        <h1 v-lc="msg"></h1>
        <input type="text" v-focus>
    </div>
    <div id="app1">
        <h3 v-uc1='msg'></h3>
    </div>
    <script>
        // 需求：让字符串全部大写  要求不能使用methods和computed，使用指令


        // 数据驱动视图  改变数据视图会自动发生变化
        // 全局自定义指令
        Vue.directive("uc1", {
            bind(el, binding) {
                console.dir(el);
                console.log(binding);
                el.innerText = binding.value.toUpperCase();
            }
        })


        const vm = new Vue({
            el: '#app',
            data: {
                msg: 'WangHouBang',
                info: 'zhadewanzihaochima?'
            },
            methods: {
                toUpper() {
                    // 函数内部逻辑
                    this.msg = this.msg.toUpperCase();
                    // return this.msg.toUpperCase();
                }
            },
            computed: {
                msgA() {
                    return this.msg.toUpperCase();
                }
            },
            // 自定义局部指令
            directives: {
                uc: {
                    bind(el, binding) {
                        console.dir(el); //绑定指令的元素
                        console.log(binding); //一个对象
                        //value  指令绑定的值  v-指令名=后面的值
                        // name 指令名
                        // rawName v-指令.修饰符
                        // expression 变量或者表达式
                        // modifiers 修饰符对象 
                        el.innerText = binding.value.toUpperCase();
                        console.log(el.parentNode); //null
                    }
                },
                lc: {
                    inserted(el, binding) {
                        console.dir(el); //绑定指令的元素
                        console.log(binding); //一个对象
                        //value  指令绑定的值  v-指令名=后面的值
                        // name 指令名
                        // rawName v-指令.修饰符
                        // expression 变量或者表达式
                        // modifiers 修饰符对象 
                        el.innerText = binding.value.toLowerCase();
                        console.log(el.parentNode); //div#app
                    }
                },
                focus: {
                    /* bind(el) {
                        el.focus();
                    } */
                    inserted(el) {
                        el.focus();
                    }
                }
            }
        })
        // 学过的指令 v-on v-text v-html v-if v-else v-show v-model v-bind v-once v-for v-cloak
        const vm1 = new Vue({
            el: '#app1',
            data: {
                msg: 'test app1'
            }
        })
        // bind inserted区别：
        // DOM插入都会调用，bind在inserted之前
        // bind时父节点为null ;inserted时父节点为存在；bind在DOM树绘制前调用，inserted在DOM树绘制之后调用
    </script>
</body>

</html>